/*
2021-12-06 Belongs to the work
PS 处理时间需要安装dayjs 
// cnpm install dayjs --save
https://www.jianshu.com/p/ed20fb23e658 dayjs官网
*/
import dayjs from "dayjs"
const common = {
    changeTitle(title) {
        // 这个是移动端的title 显示
        document.querySelector('title').text = title;
        if (window.ele_health_card) {
            window.ele_health_card.changeTitle(title);
        }
        if (window.webkit && (window.navigator.userAgent.indexOf('JKTNATIVE') > 0)) {
            this.callApp('changeTitle', title);
        }
    },
    changeTitleBar(params) {
        if (window.ele_health_card) {
            // 传0都透明，1都白色
            window.ele_health_card.changeTitleBar(params);
        }
        if (window.webkit && (window.navigator.userAgent.indexOf('JKTNATIVE') > 0)) {
            this.callApp('changeTitleBar', params);
        }
    },
}
// ======= 处理时间
export function formatTime (value, format = 'YYYY-MM-DD hh:mm:ss') {
    return dayjs(value).format(format)//时间戳转time YYYY-MM-DD hh:mm:ss
}
export function changeDateFormat(format = 'YYYYMMDD') {
    return dayjs(new Date()).format(format)//当前时间YYYY-MM-DD
}
export function changeMount(format = 'YYYYMM') {
    return dayjs(new Date()).format(format)//转化成月
}
export function getToday(format = 'YYYY年MM月DD日 hh:mm:ss') {
    return dayjs(new Date()).format(format)//当前时间YYYY-MM-DD hh:mm:ss
}
export function getYT(format = 'YYYY年MM月') {
    return dayjs(new Date()).format(format)//当前时间YYYY-MM-DD hh:mm:ss
}
export function backDayRange(format = 'YYYYMMDD') {
    return dayjs(new Date()).subtract(2, 'day').format(format)//倒退几天 减几天就是倒退几天
}
export function lastMonth(format = 'YYYYMM') {
    var currentdate = dayjs(new Date()).subtract(1, 'months').format(format)
    return currentdate//当前时间的前1个月
}
export function TimeMonth(format = 'YYYY-MM') {
    var currentdate = dayjs(new Date()).subtract(1, 'months').format(format)
    return currentdate//当前时间的前1个月
}
export function Yearmonth(format ='YYYY-MM-DD') {
    return dayjs(new Date()).subtract(2, 'day').format(format)
}
export function twoMonth(format = 'YYYYMM') {
    var currentdate = dayjs(new Date()).subtract(2, 'day').subtract(1, 'months').format(format)
    return currentdate//当前时间的前1个月
}
export function dayMonth(format ='YYYYMM') {
    var currentdate = dayjs(new Date()).subtract(3, 'day').format(format)
    return currentdate//3号之前显示的是上个月 3号之后显示这个月 
    //就是时间往前推3天就好  显示当月
}
export function timestamp() {
    return dayjs().unix()//时间转时间戳
}
// 接受0(星期日)到6(星期六)的数字
export function lastWeekDay(format = 'YYYYMMDD') {
    return dayjs().day(0).format(format)//定义到周日 上周日的时间
}
export function twoWeekDay(format = 'YYYYMMDD') {
    //定义到周日 每周二更新上周日 否则是上上周日 就是周2之前是上上周日 周2更新显示上周日 
    return dayjs(new Date()).subtract(3, 'day').day(0).format(format)
}
export function ThreeWeekDay(format = 'YYYYMMDD') {
    //定义到周日 每周二更新上周日 否则是上上周日 就是周2之前是上上周日 周2更新显示上周日 
    return dayjs(new Date()).day(0).format(format)
}
// ====== 保留小数
export function toDecimal2(x) {
    // 保留2位小数点 强制保留2位小数，如：2，会在2后面补上00.即2.00 
    // 这个是四舍五入的 3.245 变成3.25
    var f = parseFloat(x);
    if (isNaN(f)) {
        return false;
    }
    var f = Math.round(x * 100) / 100;
    var s = f.toString();
    var rs = s.indexOf('.');
    if (rs < 0) {
        rs = s.length;
        s += '.';
    }
    while (s.length <= rs + 2) {
        s += '0';
    }
    return s;
}
export function toFixed(num, decimal) {
    //  保留2位小数点 这个不是四舍五入 
    // 2个参数 第一个是数值 第二个是保留几位
    num = num.toString();
    let index = num.indexOf('.');
    if (index !== -1) {
        num = num.substring(0, decimal + index + 1)
    } else {
        num = num.substring(0)
    }
    return parseFloat(num).toFixed(decimal)
}
export function listFloat(num,n){   
    var f = parseFloat(num);
    if(isNaN(f)){
        return false;
    }   
    f = Math.round(num*Math.pow(10, n))/Math.pow(10, n); // n 幂   
    var s = f.toString();
    var rs = s.indexOf('.');
    //判定如果是整数，增加小数点再补0
    if(rs < 0){
        rs = s.length;
        s += '.'; 
    }
    while(s.length <= rs + n){
        s += '0';
    }
    return s;
}  
// ======= 小数转百分数 ======= 百分数转小数
export function toPercent(point) {
    // 小数转化为百分数  toFixed() 作用保留几位小数位 现在是保留2位
    var percent = Number(point * 100).toFixed(2);
    percent += "%";
    return percent;
}
export function toPoint(percent) {
    // 百分数转小数
    var str = percent.replace("%", "");
    str = str / 100;
    return str;
}
//校验身份证号
//身份证验证
export function validateSfz(rule, value, callback) {
    if (!value) {
      return callback(new Error('身份证号码不能为空'));
    }
    function validataCredentials(num) {
      var msg, boo; //  msg身份证验证友情提示,boo返回值
      var num = num.toUpperCase(); // 身份证为末尾可能是X
      //   身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，
      //   最后一位是校验位，可能为数字或字符X。
      const arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
      const arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
      var nTemp = 0,
        i;
      if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
        //  输入的身份证号长度不对，或者号码不符合规定;
        return [boo = false, msg = "输入的身份证号长度不对，或者号码不符合规定"];
      }
      //   校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
      //   下面分别分析出生日期和校验位
      var len, re;
      len = num.length;
      if (len == 15) {
        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
        var arrSplit = num.match(re);
        //   检查生日日期是否正确
        var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
          //   输入的身份证号里出生日期不对！
          return [boo = false, msg = "输入的身份证号里出生日期不对！"];
  
        } else {
          //   将15位身份证转成18位
          //   校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。   
          num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
          for (i = 0; i < 17; i++) {
            nTemp += num.substr(i, 1) * arrInt[i];
          }
          num += arrCh[nTemp % 11];
          return [boo = true, msg = num];
        }
      }
      if (len == 18) {
        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
        var arrSplit = num.match(re);
        //  检查生日日期是否正确
        var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
          //  输入的身份证号里出生日期不对！ 
  
          return [boo = false, msg = " 输入的身份证号里出生日期不对"];
        } else {
          //  检验18位身份证的校验码是否正确。
          //  校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
          var valnum;
          for (i = 0; i < 17; i++) {
            nTemp += num.substr(i, 1) * arrInt[i];
          }
          valnum = arrCh[nTemp % 11];
          if (valnum != num.substr(17, 1)) {
            //  18位身份证的校验码不正确！
            return [boo = false, msg = "身份证的校验码不正确！"];
          }
          return [boo = true, msg = "验证成功"]
        }
      }
      return [boo = false, msg = "身份证的长度不正确！"];
    }
    setTimeout(() => {
      var res = validataCredentials(value);
      if (!res[0]) {
        callback(new Error(res[1]));
      } else {
        callback();
      }
    }, 200);
  };

export default common



